home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Library
/
RoseWare - Network Support Library.iso
/
apidev
/
ndr1.exe
/
BRETT1.C
next >
Wrap
Text File
|
1993-09-02
|
6KB
|
209 lines
/****************************************************************************
The following code was taken from the Network Developer's Resource, published
by RoseWare. All contents are Copyright (c) 1993, RoseWare. All Rights
Reserved.
This material is made available as a service for subscribers of the Network
Developer's Resource. This material is not public domain. Simply put, if you
are not a subscriber of the Network Developer's Resource, you are using this
material illegally.
Those interested in subscribing should contact RoseWare via:
CompuServe: 76711,110
Internet: 76711.110@compuserve.com
Phone: (703) 799-2509
Fax: (703) 799-8041
BBS: (703) 799-2536
US Mail: P.O. Box 257
Mount Vernon, VA 22121-0257
Also see the file SUBSCRIB.TXT in this ZIP file...
Contents:
Excerpts from Brett Warthen's "A Window Into NetWare" article in the Premiere
Issue of the Network Developer's Resource. See text for explanation of the
code.
****************************************************************************/
////////////////////////////////////////////////////////////////////////
long LongSwap (long longInt) {
ASM mov ax,word ptr longInt
ASM mov bx,word ptr longInt[2]
ASM xchg ah,al
ASM xchg bh,bl
ASM mov word ptr longInt,bx
ASM mov word ptr longInt[2],ax
return longInt;
}
////////////////////////////////////////////////////////////////////////
WORD WordSwap (WORD wordInt) {
ASM mov ax,wordInt
ASM xchg ah,al
ASM mov word ptr wordInt,ax
return wordInt;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
WORD GetConnectionNumber (void) {
WORD i;
ASM mov ah,0DCh
NetWareRequest();
ASM cmp ah,0DCh // Did high order byte change?
ASM jnz its_big // Yes...must be a connection # > 255
ASM xor ah,ah // No...zero out high order byte
its_big: // to return connection # as a word
ASM mov i,ax
return i;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
BYTE NetWareCall (BYTE function_no, LPSTR request_buffer,
LPSTR reply_buffer) {
BYTE rc;
ASM push ds // Save our segment registers!
ASM push es
ASM mov ah,function_no // Function number in AH
ASM lds si,request_buffer // DS:SI points to request buffer
ASM les di,reply_buffer // ES:DI points to reply buffer
NetWareRequest (); // call NetWare!
ASM pop es // Restore segment registers
ASM pop ds
ASM mov rc,al // Return code in AL
return rc;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
BOOL IsBigUserNetWare (void) {
int rc;
struct { // E3h function 11h
WORD B1_buffer_length; // Get File Server Info
BYTE B1_subfunction;
} B_request_buffer;
struct {
WORD B2_buffer_length;
char B2_server_name[48];
BYTE B2_netware_version;
BYTE B2_netware_subversion;
WORD B2_max_connections;
WORD B2_in_use_connections;
WORD B2_max_volumes;
BYTE B2_netware_revision_no;
BYTE B2_SFT_level;
BYTE B2_TTS_level;
WORD B2_peak_connections;
BYTE B2_accounting_version;
BYTE B2_VAP_version;
BYTE B2_queuing_version;
BYTE B2_print_server_version;
BYTE B2_virtual_console_version;
BYTE B2_security_restrictions_version;
BYTE B2_internetwork_bridge_version;
BYTE B2_reserved[60];
} B_reply_buffer;
B_request_buffer.B1_buffer_length = sizeof(B_request_buffer) - 2;
B_request_buffer.B1_subfunction = 0x11;
B_reply_buffer.B2_buffer_length = sizeof(B_reply_buffer) - 2;
rc = NetWareCall (0xE3, (LPSTR)&B_request_buffer, (LPSTR)&B_reply_buffer);
if (WordSwap(B_reply_buffer.B2_max_connections) > 255) {
return TRUE;
}
else {
return FALSE;
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
int GetLoginName (LPSTR loginName) {
/* Returns 0 for success, non-zero for failure. */
int rc;
struct {
WORD A1_buffer_length;
BYTE A1_subfunction;
BYTE A1_connection_number;
} A_request_buffer;
struct {
WORD A10001_buffer_length;
BYTE A10001_subfunction;
DWORD A10001_connection_number;
} A1000_request_buffer;
struct {
WORD A2_buffer_length;
unsigned long A2_object_id;
WORD A2_object_type;
char A2_object_name[48];
BYTE A2_login_time[8];
} A_reply_buffer;
A_reply_buffer.A2_buffer_length = sizeof(A_reply_buffer) - 2;
if (IsBigUserNetWare ()) {
A1000_request_buffer.A10001_buffer_length = sizeof(A1000_request_buffer)
- 2;
A1000_request_buffer.A10001_subfunction = 0x1C;
A1000_request_buffer.A10001_connection_number =
(DWORD)GetConnectionNumber();
rc = NetWareCall (0xE3, (LPSTR)&A1000_request_buffer,
(LPSTR)&A_reply_buffer);
}
else {
A_request_buffer.A1_buffer_length = sizeof(A_request_buffer) - 2;
A_request_buffer.A1_subfunction = 0x16;
A_request_buffer.A1_connection_number = (BYTE)GetConnectionNumber();
rc = NetWareCall (0xE3, (LPSTR)&A_request_buffer,
(LPSTR)&A_reply_buffer);
}
if (!rc)
lstrcpy (loginName, A_reply_buffer.A2_object_name);
return rc;
}
////////////////////////////////////////////////////////////////////////